﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Sisco.AplicacionEscritorio.Util;
using Sisco.LogicaNegocio;

namespace Sisco.AplicacionEscritorio.Usuario
{
    public partial class Modificar_Usuario : Form
    {
        private AccesoDatos.USUARIO UsuarioSistema;

        public Modificar_Usuario()
        {
            InitializeComponent();
        }

        public Modificar_Usuario(AccesoDatos.USUARIO usuariosistema) : this()
        {
            // TODO: Complete member initialization
            this.UsuarioSistema = usuariosistema;
        }

        private void LoadListEmpresa()
        {
            EmpresaBLL empresaBLL = new EmpresaBLL();

            cmbEmpresa.DataSource = empresaBLL.Listar();
            cmbEmpresa.ValueMember = "ID";
            cmbEmpresa.DisplayMember = "NOMBREEMPRESA";
            cmbEmpresa.SelectedIndex = -1;
        }

        private void LoadListDepartamento()
        {
            DepartamentoBLL departamentoBLL = new DepartamentoBLL();
            cmbDepartamento.DataSource = departamentoBLL.Listar();
            cmbDepartamento.ValueMember = "ID";
            cmbDepartamento.DisplayMember = "NOMBREDEPARTAMENTO";
            cmbDepartamento.SelectedIndex = -1;
        }

        private void cmbEmpresa_SelectionChangeCommitted(object sender, EventArgs e)
        {
            if (cmbEmpresa.SelectedIndex >= 0)
            {
                SucursalBLL sucursalBLL = new SucursalBLL();

                AccesoDatos.EMPRESA selectedEmpresa = cmbEmpresa.SelectedItem as AccesoDatos.EMPRESA;
                cmbSucursal.DataSource = sucursalBLL.Listar(selectedEmpresa);
                cmbSucursal.ValueMember = "ID";
                cmbSucursal.DisplayMember = "CIUDAD";
                cmbSucursal.SelectedIndex = -1;
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            FormularioBuscar formBusqueda = new FormularioBuscar("Usuario");
            formBusqueda.ShowDialog(this);

            if (formBusqueda.ObjetoBuscado != null)
            {
                gbDatosTrabajador.Enabled = true;
                gbAccesoSistema.Enabled = true;
                btnModificar.Enabled = true;

                LoadListEmpresa();
                LoadListDepartamento();                

                //establecemos los valores en el formulario
                AccesoDatos.USUARIO selectedUsuario = formBusqueda.ObjetoBuscado as AccesoDatos.USUARIO;
                txtUsuarioBusqueda.Tag = selectedUsuario;

                txtUsuarioBusqueda.Text = selectedUsuario.NOMBRECOMPLETO != null ? selectedUsuario.NOMBRECOMPLETO.Trim() : string.Empty;

                rbPersonalEmpresa.Checked = selectedUsuario.IDEMPRESA.HasValue ? selectedUsuario.IDEMPRESA > 0 ? true : false : false;
                rbTercero.Checked = selectedUsuario.IDEMPRESA.HasValue ? selectedUsuario.IDEMPRESA == 0 ? true : false : false;
                txtCodigoEmpleado.Text = selectedUsuario.CODIGO_RRHH != null ? selectedUsuario.CODIGO_RRHH.Trim() : string.Empty;
                txtNombre.Text = selectedUsuario.NOMBRES != null ? selectedUsuario.NOMBRES.Trim() : string.Empty;
                txtApellidos.Text = selectedUsuario.APELLIDOS != null ? selectedUsuario.APELLIDOS.Trim() : string.Empty;
                txtCorreo.Text = selectedUsuario.CORREO != null ? selectedUsuario.CORREO.Trim() : string.Empty;
                cmbEmpresa.SelectedIndex = selectedUsuario.IDEMPRESA.HasValue ? selectedUsuario.IDEMPRESA > 0 ? cmbEmpresa.Items.IndexOf(cmbEmpresa.Items.Cast<AccesoDatos.EMPRESA>().SingleOrDefault(x => x.ID == selectedUsuario.IDEMPRESA)) : -1 : -1;
                this.cmbEmpresa_SelectionChangeCommitted(this, e);
                cmbSucursal.SelectedIndex = selectedUsuario.IDSUCURSAL.HasValue ? cmbSucursal.Items.IndexOf(cmbSucursal.Items.Cast<AccesoDatos.SUCURSAL>().SingleOrDefault(x => x.ID == selectedUsuario.IDSUCURSAL)) : -1;
                cmbDepartamento.SelectedIndex = selectedUsuario.IDDEPARTAMENTO.HasValue ? cmbDepartamento.Items.IndexOf(cmbDepartamento.Items.Cast<AccesoDatos.DEPARTAMENTO>().SingleOrDefault(x => x.ID == selectedUsuario.IDDEPARTAMENTO)) : -1;
                txtUsuarioWindows.Text = selectedUsuario.USUARIO_WINDOWS != null ? selectedUsuario.USUARIO_WINDOWS.Trim() : string.Empty;
                txtUsuarioDBS.Text = selectedUsuario.USUARIO_DBS != null ? selectedUsuario.USUARIO_DBS.Trim() : string.Empty;
                txtTelefono.Text = selectedUsuario.TELEFONO != null ? selectedUsuario.TELEFONO.Trim() : string.Empty;
                txtAnexo.Text = selectedUsuario.ANEXO != null ? selectedUsuario.ANEXO.Trim() : string.Empty;
                txtCelular.Text = selectedUsuario.CELULAR != null ? selectedUsuario.CELULAR.Trim() : string.Empty;
                txtRPM.Text = selectedUsuario.RPM != null ? selectedUsuario.RPM.Trim() : string.Empty;
                txtRPC.Text = selectedUsuario.RPC != null ? selectedUsuario.RPC.Trim() : string.Empty;
                txtNextel.Text = selectedUsuario.NEXTEL != null ? selectedUsuario.NEXTEL.Trim() : string.Empty;
                txtUsuario.Text = selectedUsuario.USUARIO_SIST != null ? selectedUsuario.USUARIO_SIST.Trim() : string.Empty;
                txtPassword.Text = selectedUsuario.PASSWORD_SIST != null ? selectedUsuario.PASSWORD_SIST.Trim() : string.Empty;
            }
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            bool correcto = false;
            bool correcto1 = false;
            AccesoDatos.USUARIO selectedUsuario = txtUsuarioBusqueda.Tag as AccesoDatos.USUARIO;

            if (txtUsuarioBusqueda.Tag != null)
            {
                if (!string.IsNullOrWhiteSpace(txtNombre.Text))
                {
                    if (!string.IsNullOrWhiteSpace(txtApellidos.Text))
                    {
                        if (!(string.IsNullOrWhiteSpace(txtCodigoEmpleado.Text) && rbPersonalEmpresa.Checked))
                        {
                            UsuarioBLL usuarioBLL = new UsuarioBLL();

                            if (selectedUsuario.NOMBRES.Trim().Equals(txtNombre.Text.Trim(), StringComparison.CurrentCultureIgnoreCase) &&
                                selectedUsuario.APELLIDOS.Trim().Equals(txtApellidos.Text.Trim(), StringComparison.CurrentCultureIgnoreCase) &&
                                selectedUsuario.CODIGO_RRHH.Trim().Equals(txtCodigoEmpleado.Text.Trim(), StringComparison.CurrentCultureIgnoreCase))
                            {
                                //if (rbPersonalEmpresa.Checked)
                                //{
                                //    List<AccesoDatos.USUARIO> listaUsuario1 = usuarioBLL.BuscarUsuario(txtCodigoEmpleado.Text.Trim());

                                //    if (listaUsuario1.Count == 0)
                                //    {
                                        correcto = true;
                                //    }
                                //    else
                                //    {
                                //        MessageBox.Show("El codigo de empleado ya esta asignado en otro usuario ", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                //    }
                                //}
                                //else if (rbTercero.Checked)
                                //{
                                //    correcto = true; 
                                //}
                            }
                            else
                            {
                                List<AccesoDatos.USUARIO> listaUsuario1 = !(selectedUsuario.NOMBRES.Trim().Equals(txtNombre.Text.Trim(), StringComparison.CurrentCultureIgnoreCase) && selectedUsuario.APELLIDOS.Trim().Equals(txtApellidos.Text.Trim(), StringComparison.CurrentCultureIgnoreCase)) ? usuarioBLL.BuscarUsuario(txtNombre.Text.Trim(), txtApellidos.Text.Trim()) : new List<AccesoDatos.USUARIO>();
                                List<AccesoDatos.USUARIO> listaUsuario2 = rbPersonalEmpresa.Checked ? !selectedUsuario.CODIGO_RRHH.Trim().Equals(txtCodigoEmpleado.Text.Trim(), StringComparison.CurrentCultureIgnoreCase) ? usuarioBLL.BuscarUsuario(txtCodigoEmpleado.Text.Trim()) : new List<AccesoDatos.USUARIO>() : new List<AccesoDatos.USUARIO>();
                                List<AccesoDatos.USUARIO> ListaUsuario12 = listaUsuario1.Union(listaUsuario2).ToList();

                                if (ListaUsuario12.Count == 0)
                                {
                                    //List<AccesoDatos.USUARIO> listaNombresBusqueda = usuarioBLL.Buscar("NOMBRE", txtNombre.Text.Trim());
                                    //List<AccesoDatos.USUARIO> listaApellidosBusqueda = usuarioBLL.Buscar("APELLIDOS", txtNombre.Text.Trim());
                                    //List<AccesoDatos.USUARIO> listaNombreApellido = listaNombresBusqueda.Union(listaApellidosBusqueda).ToList();

                                    //if (listaNombreApellido.Count > 0)
                                    //{
                                    //    DialogResult result = (new DialogBusqueda("USUARIO", "Los siguientes nombres coinciden con los nombres o apellidos ingresados.\n¿Desea Continuar?", "Sisco", listaNombreApellido)).ShowDialog(this);

                                    //    if (result == DialogResult.Yes)
                                    //    {
                                    //        correcto = true;
                                    //    }
                                    //    else if (result == DialogResult.No)
                                    //    {
                                    //        this.LimpiarFormulario();
                                    //    }
                                    //}
                                    //else
                                    //{
                                    //    correcto = true;
                                    //}
                                    correcto = true;
                                }
                                else
                                {
                                    if (listaUsuario1.Count > 0)
                                    {
                                        MessageBox.Show("El usuario ya se encuentra registrado", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                    }
                                    else if (listaUsuario2.Count > 0)
                                    {
                                        MessageBox.Show("El codigo de empleado ya esta asignado en otro usuario ", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                    }
                                } 
                            }
                        }
                        else
                        {
                            MessageBox.Show("Ingrese el codigo del empleado", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Ingrese los apellidos del usuario", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    MessageBox.Show("Ingrese los nombres del usuario", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show("Seleccione el usuario", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }

            if (correcto)
            {
                if (rbPersonalEmpresa.Checked)
                {
                    if (cmbEmpresa.SelectedIndex >= 0)
                    {
                        if (cmbSucursal.SelectedIndex >= 0)
                        {
                            if (cmbDepartamento.SelectedIndex >= 0)
                            {
                                if ((string.IsNullOrWhiteSpace(txtUsuario.Text) && string.IsNullOrWhiteSpace(txtPassword.Text)) ||
                                    (!string.IsNullOrWhiteSpace(txtUsuario.Text) && !string.IsNullOrWhiteSpace(txtPassword.Text)))
                                {
                                    correcto1 = true;
                                }
                                else
                                {
                                    MessageBox.Show("El campo de usuario o password para el acceso al sistema se encuentra vacío.", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                }
                            }
                            else
                            {
                                MessageBox.Show("Seleccione campo de Departamento", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                            }
                        }
                        else
                        {
                            MessageBox.Show("Seleccione campo de sucursal", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Seleccione campo de Empresa", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    correcto1 = true;
                }
            }

            if (correcto1)
            {
                UsuarioBLL usuarioBLL = new UsuarioBLL();                

                AccesoDatos.USUARIO updUsuario = new AccesoDatos.USUARIO()
                {
                    IDEMPRESA = rbPersonalEmpresa.Checked ? int.Parse(cmbEmpresa.SelectedValue.ToString()) : 0,
                    IDSUCURSAL = rbPersonalEmpresa.Checked ? int.Parse(cmbSucursal.SelectedValue.ToString()) : new Nullable<int>(),
                    IDDEPARTAMENTO = rbPersonalEmpresa.Checked ? int.Parse(cmbDepartamento.SelectedValue.ToString()) : new Nullable<int>(),
                    CODIGO_RRHH = rbPersonalEmpresa.Checked ? txtCodigoEmpleado.Text.Trim() : string.Empty,
                    USUARIO_WINDOWS = txtUsuarioWindows.Text.Trim(),
                    USUARIO_DBS = rbPersonalEmpresa.Checked ? txtUsuarioDBS.Text.Trim() : string.Empty,
                    NOMBRES = txtNombre.Text.Trim(),
                    APELLIDOS = txtApellidos.Text.Trim(),
                    NOMBRECOMPLETO = txtApellidos.Text.Trim() + " " + txtNombre.Text.Trim(),
                    CORREO = txtCorreo.Text.Trim(),
                    SUCURSAL = rbPersonalEmpresa.Checked ? (cmbSucursal.SelectedItem as AccesoDatos.SUCURSAL).CIUDAD.Trim() : string.Empty,
                    DEPARTAMENTO = rbPersonalEmpresa.Checked ? (cmbDepartamento.SelectedItem as AccesoDatos.DEPARTAMENTO).NOMBREDEPARTAMENTO : string.Empty,
                    TELEFONO = txtTelefono.Text.Trim(),
                    ANEXO = txtAnexo.Text.Trim(),
                    CELULAR = txtCelular.Text.Trim(),
                    RPM = txtRPM.Text.Trim(),
                    RPC = txtRPC.Text.Trim(),
                    NEXTEL = txtNextel.Text.Trim(),
                    REPARADOR = (!string.IsNullOrWhiteSpace(txtUsuario.Text) && (!string.IsNullOrWhiteSpace(txtPassword.Text))) ? 1 : 0,
                    USUARIO_SIST = txtUsuario.Text,
                    PASSWORD_SIST = txtPassword.Text,
                    ELIMINADO = 0,
                    FECHAMODIFICACION = DateTime.Now,
                    MODIFICADOPOR = UsuarioSistema.NOMBRECOMPLETO != null ? UsuarioSistema.NOMBRECOMPLETO.Trim() : string.Empty
                };

                int usuarioModificado = usuarioBLL.Modificar(selectedUsuario, updUsuario);

                if (usuarioModificado > 0)
                {
                    DialogResult dr = MessageBox.Show("Usuario modificado", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                                                
                    this.LimpiarFormulario();
                    //this.LoadListEmpresa();
                    //this.LoadListDepartamento();
                    txtUsuarioBusqueda.ResetText();
                    txtUsuarioBusqueda.Tag = null;
                    gbDatosTrabajador.Enabled = false;
                    gbAccesoSistema.Enabled = false;
                    btnModificar.Enabled = false;
                } 
            }
        }

        private void LimpiarFormulario()
        {
            txtNombre.ResetText();
            txtApellidos.ResetText();
            txtCorreo.ResetText();
            cmbEmpresa.DataSource = null;
            cmbSucursal.DataSource = null;
            cmbDepartamento.DataSource = null;

            txtUsuarioDBS.ResetText();
            txtUsuarioWindows.ResetText();

            txtCodigoEmpleado.ResetText();
            txtTelefono.ResetText();
            txtAnexo.ResetText();
            txtCelular.ResetText();
            txtRPM.ResetText();
            txtRPC.ResetText();
            txtNextel.ResetText();

            txtUsuario.ResetText();
            txtPassword.ResetText();
        }

        private void rbPersonalEmpresa_CheckedChanged(object sender, EventArgs e)
        {
            if (rbPersonalEmpresa.Checked)
            {
                cmbEmpresa.Enabled = true;
                cmbSucursal.Enabled = true;
                cmbDepartamento.Enabled = true;
                txtCodigoEmpleado.Enabled = true;
                txtUsuarioDBS.Enabled = true;

                this.LoadListEmpresa();
                this.LoadListDepartamento();
            }
        }

        private void rbTercero_CheckedChanged(object sender, EventArgs e)
        {
            if (rbTercero.Checked)
            {
                cmbEmpresa.DataSource = null;
                cmbEmpresa.Enabled = false;

                cmbSucursal.DataSource = null;
                cmbSucursal.Enabled = false;

                cmbDepartamento.DataSource = null;
                cmbDepartamento.Enabled = false;

                txtCodigoEmpleado.ResetText();
                txtCodigoEmpleado.Enabled = false;
                txtUsuarioDBS.ResetText();
                txtUsuarioDBS.Enabled = false;
            }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
